const app = getApp()
const authApi = require('../../api/auth')

Page({
  data: {
    formData: {
      nickname: '',
      email: '',
      phone: ''
    },
    errors: {
      email: '',
      phone: ''
    },
    loading: false,
    originalData: {} // 保存原始数据，用于检测是否有变更
  },

  onLoad: function (options) {
    this.loadUserInfo()
  },

  // 加载用户信息
  async loadUserInfo() {
    try {
      wx.showLoading({
        title: '加载中...',
        mask: true
      })

      const userInfo = await authApi.getUserInfo()

      const formData = {
        nickname: userInfo.nickname || '',
        email: userInfo.email || '',
        phone: userInfo.phone || ''
      }

      this.setData({
        formData: formData,
        originalData: { ...formData } // 深拷贝原始数据
      })

      wx.hideLoading()
    } catch (error) {
      wx.hideLoading()
      console.error('加载用户信息失败:', error)

      wx.showModal({
        title: '提示',
        content: '加载用户信息失败，请重试',
        success: (res) => {
          if (res.confirm) {
            wx.navigateBack()
          }
        }
      })
    }
  },

  // 昵称输入
  onNicknameInput(e) {
    this.setData({
      'formData.nickname': e.detail.value
    })
  },

  // 邮箱输入
  onEmailInput(e) {
    const email = e.detail.value
    this.setData({
      'formData.email': email,
      'errors.email': ''
    })

    // 实时验证邮箱格式
    if (email && !this.validateEmail(email)) {
      this.setData({
        'errors.email': '邮箱格式不正确'
      })
    }
  },

  // 手机号输入
  onPhoneInput(e) {
    const phone = e.detail.value
    this.setData({
      'formData.phone': phone,
      'errors.phone': ''
    })

    // 实时验证手机号格式
    if (phone && !this.validatePhone(phone)) {
      this.setData({
        'errors.phone': '手机号格式不正确'
      })
    }
  },

  // 验证邮箱格式
  validateEmail(email) {
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
    return emailRegex.test(email)
  },

  // 验证手机号格式
  validatePhone(phone) {
    const phoneRegex = /^1[3-9]\d{9}$/
    return phoneRegex.test(phone)
  },

  // 表单验证
  validateForm() {
    const { formData } = this.data
    const errors = {}

    // 昵称必填
    if (!formData.nickname.trim()) {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      })
      return false
    }

    // 邮箱格式验证（如果填写了）
    if (formData.email && !this.validateEmail(formData.email)) {
      errors.email = '邮箱格式不正确'
    }

    // 手机号格式验证（如果填写了）
    if (formData.phone && !this.validatePhone(formData.phone)) {
      errors.phone = '手机号格式不正确'
    }

    // 如果有错误，显示并返回false
    if (Object.keys(errors).length > 0) {
      this.setData({ errors })
      wx.showToast({
        title: '请检查输入信息',
        icon: 'none'
      })
      return false
    }

    return true
  },

  // 检查数据是否有变更
  hasDataChanged() {
    const { formData, originalData } = this.data
    return JSON.stringify(formData) !== JSON.stringify(originalData)
  },

  // 提交表单
  async onSubmit(e) {
    // 表单验证
    if (!this.validateForm()) {
      return
    }

    // 检查是否有变更
    if (!this.hasDataChanged()) {
      wx.showToast({
        title: '没有修改任何信息',
        icon: 'none'
      })
      return
    }

    this.setData({ loading: true })

    try {
      const { formData } = this.data

      // 调用更新接口
      await authApi.updateProfile({
        nickname: formData.nickname.trim(),
        email: formData.email.trim() || null,
        phone: formData.phone.trim() || null
      })

      wx.showToast({
        title: '保存成功',
        icon: 'success'
      })

      // 更新全局用户信息
      if (app.globalData.userInfo) {
        app.globalData.userInfo.nickname = formData.nickname.trim()
        app.globalData.userInfo.email = formData.email.trim()
        app.globalData.userInfo.phone = formData.phone.trim()
        wx.setStorageSync('userInfo', app.globalData.userInfo)
      }

      // 延迟返回，让用户看到成功提示
      setTimeout(() => {
        wx.navigateBack()
      }, 1500)

    } catch (error) {
      console.error('更新用户信息失败:', error)

      let errorMessage = '保存失败，请重试'
      if (error.message) {
        errorMessage = error.message
      } else if (error.statusCode === 400) {
        errorMessage = '输入信息有误，请检查'
      } else if (error.statusCode === 401) {
        errorMessage = '登录已过期，请重新登录'
      }

      wx.showToast({
        title: errorMessage,
        icon: 'none',
        duration: 2000
      })
    } finally {
      this.setData({ loading: false })
    }
  },

  // 取消编辑
  onCancel() {
    // 如果有未保存的修改，提示用户
    if (this.hasDataChanged()) {
      wx.showModal({
        title: '提示',
        content: '您有未保存的修改，确定要离开吗？',
        success: (res) => {
          if (res.confirm) {
            wx.navigateBack()
          }
        }
      })
    } else {
      wx.navigateBack()
    }
  }
})